package com.base.taskreports.reports.controller;

import com.base.taskreports.common.annotation.Resubmit;
import com.base.taskreports.demoExel.entity.Indicator;
import com.base.taskreports.reports.service.TBatchService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.base.taskreports.common.utlis.DateUtils;
import com.base.taskreports.common.utlis.response.Result;
import com.base.taskreports.task.service.JfsService;
import com.base.taskreports.task.service.JfuService;
import com.base.taskreports.task.service.LjService;
import com.base.taskreports.task.service.PqdService;
import com.base.taskreports.task.service.PqlService;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;

@RestController
@RequestMapping("/batch")
@ResponseBody
public class BatchController {

    @Autowired
    private LjService ljService;

    @Autowired
    private PqlService pqlService;

    @Autowired
    private PqdService pqdService;

    @Autowired
    private JfsService jfsService;

    @Autowired
    private JfuService jfuService;

    @Autowired
    private TBatchService tBatchService ;

    public static void main(String[] args) {
        // IllegalArgumentException
        System.out.println(Indicator.valueOf("JFU_M001").getName());
    }

    // 所有指标跑批任务
    @Resubmit(delaySeconds = 3)
    @RequestMapping("/indicator")
    public Result indicator(String strDate,String indicator) {

        if (strDate==null || !DateUtils.isStrDate(strDate)) {
            return new Result().error("参数输入错误,参考格式:strDate=2021-11-10") ;
        }

        if (indicator==null) {
            return new Result().error("参数输入错误,参考格式:indicator=LJ_M008") ;
        }

        try{
            Method method = null;
            Indicator.valueOf(indicator) ;

            if (indicator.indexOf("LJ_M") == 0) {
                method = LjService.class.getMethod("get" + indicator, String.class);
                method.invoke(ljService, strDate);

            } else if (indicator.indexOf("PQL_M") == 0) {
                method = PqlService.class.getMethod("get" + indicator, String.class);
                method.invoke(pqlService, strDate);

            } else if (indicator.indexOf("PQD_M") == 0) {
                method = PqdService.class.getMethod("get" + indicator, String.class);
                method.invoke(pqdService, strDate);

            } else if (indicator.indexOf("JFS_M") == 0) {
                method = JfsService.class.getMethod("get" + indicator, String.class);
                method.invoke(jfsService, strDate);

            } else if (indicator.indexOf("JFU_M") == 0) {
                method = JfuService.class.getMethod("get" + indicator, String.class);
                method.invoke(jfuService, strDate);
            }

        }catch (IllegalArgumentException e){
            return new Result().error(indicator+" 没有该项指标！") ;
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

        return new Result().ok( strDate +" "+ Indicator.valueOf(indicator).getName() + " 跑批完成") ;
    }

    // 所有指标跑批任务
    @Resubmit(delaySeconds = 10)
    @RequestMapping("/all")
    public Result all(String strDate) {

        if (strDate==null || !DateUtils.isStrDate(strDate)) {
            return new Result().error("参数输入错误,参考格式:strDate=2021-11-10") ;
        }

        if(tBatchService.isFinished(strDate)){
            return new Result().error(strDate + "任务正在执行中，不可重复发起！");
        }

        // 立减 跑批
        ljService.getLJ_M001(strDate);
        ljService.getLJ_M002(strDate);
        ljService.getLJ_M003(strDate);
        ljService.getLJ_M004(strDate);
        ljService.getLJ_M005(strDate);
        ljService.getLJ_M006(strDate);
        ljService.getLJ_M007(strDate);
        ljService.getLJ_M008(strDate);
        ljService.getLJ_M009(strDate);
        ljService.getLJ_M010(strDate);
        ljService.getLJ_M011(strDate);
        ljService.getLJ_M012(strDate);
        ljService.getLJ_M013(strDate);
        ljService.getLJ_M014(strDate);

        // 票劵-领取 跑批
        pqlService.getPQL_M001(strDate);
        pqlService.getPQL_M002(strDate);

        // 票劵-承兑 跑批
        pqdService.getPQD_M001(strDate);
        pqdService.getPQD_M002(strDate);
        pqdService.getPQD_M003(strDate);
        pqdService.getPQD_M004(strDate);
        pqdService.getPQD_M005(strDate);
        pqdService.getPQD_M006(strDate);
        pqdService.getPQD_M007(strDate);
        pqdService.getPQD_M008(strDate);
        pqdService.getPQD_M009(strDate);
        pqdService.getPQD_M010(strDate);
        pqdService.getPQD_M011(strDate);
        pqdService.getPQD_M012(strDate);
        pqdService.getPQD_M013(strDate);
        pqdService.getPQD_M014(strDate);

        // 积分-送分
        jfsService.getJFS_M001(strDate);
        jfsService.getJFS_M002(strDate);
        jfsService.getJFS_M003(strDate);
        jfsService.getJFS_M004(strDate);
        jfsService.getJFS_M005(strDate);
        jfsService.getJFS_M006(strDate);
        jfsService.getJFS_M007(strDate);

        // 积分-用分
        jfuService.getJFU_M001(strDate) ;
        jfuService.getJFU_M002(strDate) ;
        jfuService.getJFU_M003(strDate) ;
        jfuService.getJFU_M004(strDate) ;
        jfuService.getJFU_M005(strDate) ;
        jfuService.getJFU_M006(strDate) ;
        jfuService.getJFU_M007(strDate) ;
        //jfuService.getJFU_M008(strDate) ;

        return new Result().ok("All " + strDate + " 跑批完成") ;

    }

    @Resubmit(delaySeconds = 10)
    @RequestMapping("/lj")
    public Result lj(String strDate) {

        if (strDate==null || !DateUtils.isStrDate(strDate)) {
            return new Result().error("参数输入错误,参考格式:strDate=2021-11-10") ;
        }

        if(tBatchService.isFinishedLike("LJ",strDate)){
            return new Result().error("立减 任务正在执行中，不可重复发起！");
        }

        // 立减跑批
        ljService.getLJ_M001(strDate);
        ljService.getLJ_M002(strDate);
        ljService.getLJ_M003(strDate);
        ljService.getLJ_M004(strDate);
        ljService.getLJ_M005(strDate);
        ljService.getLJ_M006(strDate);
        ljService.getLJ_M007(strDate);
        ljService.getLJ_M008(strDate);
        ljService.getLJ_M009(strDate);
        ljService.getLJ_M010(strDate);
        ljService.getLJ_M011(strDate);
        ljService.getLJ_M012(strDate);
        ljService.getLJ_M013(strDate);
        ljService.getLJ_M014(strDate);

        return new Result().ok("立减 " + strDate + " 跑批完成") ;

    }

    @Resubmit(delaySeconds = 10)
    @RequestMapping("/pql")
    public Result pql(String strDate) {

        if (strDate==null || !DateUtils.isStrDate(strDate)) {
            return new Result().error("参数输入错误,参考格式:strDate=2021-11-10") ;
        }

        if(tBatchService.isFinishedLike("PQL",strDate)){
            return new Result().error("票劵-领取 任务正在执行中，不可重复发起！");
        }

        // 票劵-领取 跑批
        pqlService.getPQL_M001(strDate);
        pqlService.getPQL_M002(strDate);

        return new Result().ok("票劵-领取 " + strDate + " 跑批完成") ;

    }

    @Resubmit(delaySeconds = 10)
    @RequestMapping("/pqd")
    public Result pqd(String strDate) {

        if (strDate==null || !DateUtils.isStrDate(strDate)) {
            return new Result().error("参数输入错误,参考格式:strDate=2021-11-10") ;
        }

        if(tBatchService.isFinishedLike("PQD",strDate)){
            return new Result().error("票劵-承兑 任务正在执行中，不可重复发起！");
        }

        // 票劵-承兑 跑批
        pqdService.getPQD_M001(strDate);
        pqdService.getPQD_M002(strDate);
        pqdService.getPQD_M003(strDate);
        pqdService.getPQD_M004(strDate);
        pqdService.getPQD_M005(strDate);
        pqdService.getPQD_M006(strDate);
        pqdService.getPQD_M007(strDate);
        pqdService.getPQD_M008(strDate);
        pqdService.getPQD_M009(strDate);
        pqdService.getPQD_M010(strDate);
        pqdService.getPQD_M011(strDate);
        pqdService.getPQD_M012(strDate);
        pqdService.getPQD_M013(strDate);
        pqdService.getPQD_M014(strDate);

        return new Result().ok("票劵-承兑 " + strDate + " 跑批完成");
    }

    @Resubmit(delaySeconds = 10)
    @RequestMapping("/jfs")
    public Result jfs(String strDate) {

        if (!DateUtils.isStrDate(strDate)) {
            return new Result().error("参数输入错误,参考格式:strDate=2021-11-10") ;
        }

        if(tBatchService.isFinishedLike("JFS",strDate)){
            return new Result().error("积分-送分 任务正在执行中，不可重复发起！");
        }

        // 积分-送分
        jfsService.getJFS_M001(strDate);
        jfsService.getJFS_M002(strDate);
        jfsService.getJFS_M003(strDate);
        jfsService.getJFS_M004(strDate);
        jfsService.getJFS_M005(strDate);
        jfsService.getJFS_M006(strDate);
        jfsService.getJFS_M007(strDate);

        return new Result().ok("积分-送分 " + strDate + " 跑批完成");

    }

    @Resubmit(delaySeconds = 10)
    @RequestMapping("/jfu")
    public Result jfu(String strDate) {

        if (!DateUtils.isStrDate(strDate)) {
            return new Result().error("参数输入错误,参考格式:strDate=2021-11-10") ;
        }

        if(tBatchService.isFinishedLike("JFU",strDate)){
            return new Result().error("积分-用分 任务正在执行中，不可重复发起！");
        }

        // 积分-用分
        jfuService.getJFU_M001(strDate) ;
        jfuService.getJFU_M002(strDate) ;
        jfuService.getJFU_M003(strDate) ;
        jfuService.getJFU_M004(strDate) ;
        jfuService.getJFU_M005(strDate) ;
        jfuService.getJFU_M006(strDate) ;
        jfuService.getJFU_M007(strDate) ;
        //jfuService.getJFU_M008(strDate) ;

        return new Result().ok("积分-用分 " + strDate + " 跑批完成");

    }



}
